
package Artist_Management;

import java.sql.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import Main_menu.MainMenu;


public class ArtistsArchive extends javax.swing.JFrame {
    
    static boolean FLAG = true;//Μεταβλητή που χρησιμοποιείται για την διάκριση των ενεργειών "Εισαγωγή νέου Καλλιτέχνη"
    //και "Επεξεργασία Καλλιτέχνη" κατά την αποθήκευση.
     static boolean DELETE = true;//Μεταβλητή που χρησιμοποιείται για την διάκριση των ενεργειών "Διαγραφή νέου Καλλιτέχνη"
    //και "Επεξεργασία Καλλιτέχνη" κατά την αποθήκευση.
    
    static String artisticName;//Μεταβλητή που περιέχει κάθε φορά το καλλιτεχνικό όνομα του καλλιτέχνη που επιλέγουμε για επεξεργασία ή διαγραφή.
    

    //Μέθοδος για την εμφάνιση των στοιχείων των Καλλιτεχνών στο JTable "ArtistsTable".
    final void FillTable(){
        try {
        String url = "jdbc:derby://localhost:1527/Radiostation_DB";
        String username = "erg3";
        String password = "erg3";
        
        Connection con = DriverManager.getConnection(url, username, password);
        Statement stat = con.createStatement();
        String Query = "(SELECT * FROM ARTIST JOIN MUSICGENRE ON ARTIST.MUSICGENRE = MUSICGENRE.MUSICGENRE_ID)";
        
        ResultSet rs = stat.executeQuery(Query);
        
        DefaultTableModel DTM = new DefaultTableModel();
        DTM.addColumn("ΟΝΟΜΑ");
        DTM.addColumn("ΕΠΩΝΥΜΟ");
        DTM.addColumn("ΚΑΛΛΙΤΕΧΝΙΚΟ ΟΝΟΜΑ");
        DTM.addColumn("ΦΥΛΛΟ");
        DTM.addColumn("ΗΜΕΡΟΜ.ΓΕΝΝΗΣΗΣ");
        DTM.addColumn("ΤΟΠΟΣ ΓΕΝΝΗΣΗΣ");
        DTM.addColumn("ΕΙΔΟΣ ΜΟΥΣΙΚΗΣ");
        
        ArtistsTable.setModel(DTM);
        
        
        while (rs.next()){
            
            Object [] ob = {rs.getString("FIRSTNAME") , rs.getString("LASTNAME") , rs.getString("ARTISTICNAME") , 
            rs.getString("SEX") , rs.getString("BIRTHDAY") , rs.getString("BIRTHPLACE") , rs.getString("NAME")};
            DTM.addRow(ob);
        }
        
        
        } catch(Exception e) {
        /* Εμφάνιση μηνύματος σφάλματος */
        System.out.println(e); 
        JOptionPane.showMessageDialog(null, "Αποτυχία σύνδεσης με τη ΒΔ!", "ERROR", JOptionPane.ERROR_MESSAGE);
        /* Αναγκαστικό κλείσιμο προγράμματος */
        }
    }
    
    
    public ArtistsArchive() {
        initComponents();
        setLocationRelativeTo(null);//για την εμφάνιση του παραθύρου στο κέντρο
        
        FillTable();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        Radiostation_ProjectPUEntityManager = java.beans.Beans.isDesignTime() ? null : javax.persistence.Persistence.createEntityManagerFactory("Radiostation_ProjectPU").createEntityManager();
        artistQuery = java.beans.Beans.isDesignTime() ? null : Radiostation_ProjectPUEntityManager.createQuery("SELECT a FROM Artist a");
        artistList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : artistQuery.getResultList();
        artistQuery1 = java.beans.Beans.isDesignTime() ? null : Radiostation_ProjectPUEntityManager.createQuery("SELECT a FROM Artist a");
        artistList1 = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : artistQuery1.getResultList();
        artistQuery2 = java.beans.Beans.isDesignTime() ? null : Radiostation_ProjectPUEntityManager.createQuery("SELECT a FROM Artist a");
        artistList2 = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : artistQuery2.getResultList();
        jScrollPane1 = new javax.swing.JScrollPane();
        ArtistsTable = new javax.swing.JTable();
        InsertNewArtistBtn = new javax.swing.JButton();
        EditArtistBtn = new javax.swing.JButton();
        ExitBtn = new javax.swing.JButton();
        ErrorMessage = new javax.swing.JLabel();
        DeleteArtist = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setTitle("Αρχείο Καλλιτεχνών");
        setResizable(false);

        ArtistsTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null}
            },
            new String [] {
                "ΟΝΟΜΑ", "ΕΠΩΝΥΜΟ", "ΚΑΛΛΙΤΕΧΝΙΚΟ ΟΝΟΜΑ", "ΦΥΛΛΟ", "ΗΜΕΡΟΜ.ΓΕΝΝΗΣΗΣ", "ΤΟΠΟΣ ΓΕΝΝΗΣΗΣ", "ΕΙΔΟΣ ΜΟΥΣΙΚΗΣ"
            }
        ));
        jScrollPane1.setViewportView(ArtistsTable);

        InsertNewArtistBtn.setText("Εισαγωγή Νέου Καλλιτέχνη");
        InsertNewArtistBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                InsertNewArtistBtnActionPerformed(evt);
            }
        });

        EditArtistBtn.setText("Επεξεργασία Καλλιτέχνη");
        EditArtistBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                EditArtistBtnActionPerformed(evt);
            }
        });

        ExitBtn.setText("Έξοδος");
        ExitBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ExitBtnActionPerformed(evt);
            }
        });

        ErrorMessage.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        ErrorMessage.setForeground(new java.awt.Color(255, 0, 0));

        DeleteArtist.setText("Διαγραφή Καλλιτέχνη");
        DeleteArtist.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                DeleteArtistActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(67, 67, 67)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(InsertNewArtistBtn)
                        .addGap(112, 112, 112)
                        .addComponent(EditArtistBtn)
                        .addGap(142, 142, 142)
                        .addComponent(DeleteArtist)
                        .addGap(197, 197, 197)
                        .addComponent(ExitBtn))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(ErrorMessage, javax.swing.GroupLayout.PREFERRED_SIZE, 495, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(454, 454, 454))
                    .addComponent(jScrollPane1))
                .addContainerGap(56, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 334, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(ErrorMessage, javax.swing.GroupLayout.DEFAULT_SIZE, 31, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(InsertNewArtistBtn)
                    .addComponent(EditArtistBtn)
                    .addComponent(ExitBtn)
                    .addComponent(DeleteArtist))
                .addGap(23, 23, 23))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void InsertNewArtistBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_InsertNewArtistBtnActionPerformed
        FLAG = true;
        DELETE = false; // για να μην είναι δυνατή η διαγραφή καλλιτέχνη

        new ArtistManagementForm().setVisible(true);
        dispose();
    }//GEN-LAST:event_InsertNewArtistBtnActionPerformed

    private void ExitBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ExitBtnActionPerformed
        new MainMenu().setVisible(true);
        dispose();
    }//GEN-LAST:event_ExitBtnActionPerformed

    private void EditArtistBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_EditArtistBtnActionPerformed
        FLAG = false;
        DELETE = false; // για να μην είναι δυνατή η διαγραφή καλλιτέχνη
        int selectedRow = -1;//αρχικοποίηση μεταβλητής για να μην περιέχει προηγούμενη τιμή επιλογής.
        selectedRow = ArtistsTable.getSelectedRow();
        if (selectedRow != -1){
            artisticName = String.valueOf(ArtistsTable.getValueAt(selectedRow, 2));
            ArtistManagementForm ArtistForm = new ArtistManagementForm();
            ArtistForm.InsertValuesToForm();
            ArtistForm.setVisible(true);
            dispose();
        }
        else
            //Μήνυμα για την περίπτωση που δεν επιλεχθεί κάποιος Καλλιτέχνης.
            ErrorMessage.setText("Πρέπει να επιλέξετε έναν Καλλιτέχνη από τον παραπάνω πίνακα");
    }//GEN-LAST:event_EditArtistBtnActionPerformed

    private void DeleteArtistActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_DeleteArtistActionPerformed
      FLAG = false;
        DELETE = true;
        int selectedRow = -1;//αρχικοποίηση μεταβλητής για να μην περιέχει προηγούμενη τιμή επιλογής.
        selectedRow = ArtistsTable.getSelectedRow();
        if (selectedRow != -1){
            artisticName = String.valueOf(ArtistsTable.getValueAt(selectedRow, 2));
            ArtistManagementForm ArtistForm = new ArtistManagementForm();
            ArtistForm.InsertValuesToForm();
            ArtistForm.setVisible(true);
            dispose();
        }
        else
            //Μήνυμα για την περίπτωση που δεν επιλεχθεί κάποιος Καλλιτέχνης.
            ErrorMessage.setText("Πρέπει να επιλέξετε έναν Καλλιτέχνη από τον παραπάνω πίνακα");

        /*  try {
             int selectedRow = -1;//αρχικοποίηση μεταβλητής για να μην περιέχει προηγούμενη τιμή επιλογής.
             selectedRow = ArtistsTable.getSelectedRow();
             if (selectedRow != -1){
                artisticName = String.valueOf(ArtistsTable.getValueAt(selectedRow, 2));
                
                int reply = JOptionPane.showConfirmDialog(null, "Είστε σίγουρος για την διαγραφή;", "Είστε σίγουρος για την διαγραφή;", JOptionPane.YES_NO_OPTION);
                if (reply == JOptionPane.YES_OPTION){
                
                String url = "jdbc:derby://localhost:1527/Radiostation_DB";
                String username = "erg3";
                String password = "erg3";

                Connection con = DriverManager.getConnection(url, username, password);
                Statement stat = con.createStatement();

                String Query = "DELETE FROM ARTIST WHERE ARTISTICNAME = '"+artisticName+"'";

                stat.execute(Query);

                JOptionPane.showMessageDialog(null, "Επιτυχής διαγραφή Καλλιτέχνη");
                
                new MainMenu().setVisible(true);
                dispose();
                }
             }
             
             else
                //Μήνυμα για την περίπτωση που δεν επιλεχθεί κάποιος Καλλιτέχνης.
                ErrorMessage.setText("Πρέπει να επιλέξετε έναν Καλλιτέχνη από τον παραπάνω πίνακα");
             
            }
            
            catch(SQLException ex){
            JOptionPane.showMessageDialog(null, ex.toString());
            }*/
            
    }//GEN-LAST:event_DeleteArtistActionPerformed

    /**
     * @param args the command line arguments
     */


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTable ArtistsTable;
    private javax.swing.JButton DeleteArtist;
    private javax.swing.JButton EditArtistBtn;
    private javax.swing.JLabel ErrorMessage;
    private javax.swing.JButton ExitBtn;
    private javax.swing.JButton InsertNewArtistBtn;
    private javax.persistence.EntityManager Radiostation_ProjectPUEntityManager;
    private java.util.List<Radiostation_POJOS.Artist> artistList;
    private java.util.List<Radiostation_POJOS.Artist> artistList1;
    private java.util.List<Radiostation_POJOS.Artist> artistList2;
    private javax.persistence.Query artistQuery;
    private javax.persistence.Query artistQuery1;
    private javax.persistence.Query artistQuery2;
    private javax.swing.JScrollPane jScrollPane1;
    // End of variables declaration//GEN-END:variables
}
